package com.czl.base.data.source

import com.czl.base.base.BaseBean
import com.czl.base.data.bean.*
import io.reactivex.Observable
import okhttp3.RequestBody
import retrofit2.http.*

/**
 * @author Alwyn
 * @Date 2020/7/22
 * @Description
 */
interface HttpDataSource {
    fun loginByPwd(paramsJson: String): Observable<BaseBean<UserBean>>
    fun loginByPhoneCode(paramsJson: String): Observable<BaseBean<UserBean>>
    fun getPhoneCode(phone: String): Observable<BaseBean<Any?>>
    fun evaluateOrder(params: Map<String, String>): Observable<BaseBean<Any?>>
    fun evaluateComplaint(params: Map<String, String>):Observable<BaseBean<Any?>>
    fun evaluateHouseKeeper(params: Map<String, String>): Observable<BaseBean<Any?>>
    fun getMonthPrice(vehicleNo: String, areaId: String): Observable<BaseBean<Float>>
    fun parkCharging(vehicleNo: String): Observable<BaseBean<PayDetail>>
    fun retrievePassword(phone: String, code: String, pwd: String): Observable<BaseBean<Any?>>
    fun getMyCarList(
        vehiclesWithNoPlan: Boolean,
        areaId: String
    ): Observable<BaseBean<List<CarItem>>>

    fun getReverseSearchCar(reverseSearchBean: ReverseCarRequestBean): Observable<BaseBean<ReverseSearchBean>>
    fun deleteCarList(vehicleNos: List<String>, areaId: String): Observable<BaseBean<Any?>>
    fun deleteQueryCar(vehicleNo: String, areaId: String): Observable<BaseBean<Any?>>
    fun getMyQueryHistory(): Observable<BaseBean<List<CarItem>>>
    fun logout(): Observable<BaseBean<Any?>>
    fun getHotLine(areaId: String): Observable<BaseBean<String>>
    fun getDeleteNotice(): Observable<BaseBean<String>>
    fun verifyPwdNet(
        newPassword: String,
        oldPassword: String
    ): Observable<BaseBean<Any?>>

    fun initPassword(
        newPassword: String
    ): Observable<BaseBean<Any?>>

    fun deleteUserAccount(): Observable<BaseBean<Any?>>
    fun cancelWorkOrder(no: String): Observable<BaseBean<Any?>>
    fun readNotice(msgId: String): Observable<BaseBean<Any?>>
    fun deleteWorkOrder(no: String): Observable<BaseBean<Any?>>
    fun cancelComplaint(no:String):Observable<BaseBean<Any?>>
    fun deleteComplaint(no: String):Observable<BaseBean<Any?>>
    fun addPersonCar(params: Map<String, String>): Observable<BaseBean<Any?>>
    fun getUserRooms(phone: String, areaId: String): Observable<BaseBean<List<RoomBean>>>
    fun getApplyDetail(id: String): Observable<BaseBean<UserDetailBean>>
    fun getOwnerDetail(id: String): Observable<BaseBean<UserDetailBean>>
    fun register(username: String, password: String, repassword: String): Observable<BaseBean<Any?>>
    fun getRecordDetail(orderNo: String): Observable<BaseBean<RecordDetailBean>>
    fun queryPayResult(orderNo: String, areaId: String): Observable<BaseBean<PayResultBean>>
    fun getMonthCardList(
        pageNum: Int,
        pageSize: Int,
        areaId: String
    ): Observable<BaseBean<MonthCardListBean>>

    fun getRepairList(
        params: Map<String, String>
    ): Observable<BaseBean<ReportListBean>>

    fun getNoticeMsgList(
        params: Map<String, String>
    ): Observable<BaseBean<NoticeListBean>>

    fun getComplaintList(params: Map<String, String>):Observable<BaseBean<ReportListBean>>
    fun getScoreList(
        params: Map<String, String>
    ): Observable<BaseBean<ScoreListBean>>

    fun addPeople(
        params: Map<String, String>
    ): Observable<BaseBean<Any?>>

    fun updatePeople(
        params: Map<String, String>
    ): Observable<BaseBean<Any?>>

    fun getApplyRecords(
        areaId: String
    ): Observable<BaseBean<List<AddRecordBean>>>

    fun deleteApply(
        id: String
    ): Observable<BaseBean<Any?>>
    fun deleteHouseUser(
        id: String
    ): Observable<BaseBean<Any?>>

    fun getOwnerRecords(
        areaId: String,
        houseId: String
    ): Observable<BaseBean<List<PeopleManagerBean>>>

    fun getPointDetail(
        areaNo: String
    ): Observable<BaseBean<String>>

    fun getIntegralList(
        params: Map<String, String>
    ): Observable<BaseBean<IntegralBean>>

    fun getPayRecordList(
        params: Map<String, String>
    ): Observable<BaseBean<PayRecordListBean>>

    fun placeAnOrder(
        params: Map<String, String>
    ): Observable<BaseBean<PayInfoBean>>

    fun payWorkOrder(
        params: Map<String, String>
    ): Observable<BaseBean<WorkOrderPayBean>>

    fun getVersionName(): Observable<BaseBean<Any?>>
    fun getUserInfoNet(): Observable<BaseBean<UserInfo>>
    fun uploadHeadImg(imgSrc: String): Observable<BaseBean<ImgRspBean>>
    fun uploadHeadImg(bucketName:String,imgSrc: String,folderName:String): Observable<BaseBean<ImgRspBean>>
    fun changeUserInfo(params: Map<String, String>): Observable<BaseBean<Any?>>
    fun uploadApplyFace(params: Map<String, String>): Observable<BaseBean<Any?>>
    fun queryHouseKeeperList(params: Map<String, String>): Observable<BaseBean<HouseKeeperBean>>
    fun getHouseKeepers(params:Map<String,String>):Observable<BaseBean<HouseKeeperListBean>>
    fun webGetHouseKeepers(params:Map<String,String>):Observable<BaseBean<HouseKeeperListBean>>
    fun getOrderType(pType: Int,areaNo: String): Observable<BaseBean<List<OrderType>>>
    fun submitReport(sub: SubmitReportRequestBean): Observable<BaseBean<Any>>
    fun submitComplaint(com:ComplaintSubmitRequestBean):Observable<BaseBean<Any?>>
    fun getOrderDetail(no: String): Observable<BaseBean<OrderDetailBean>>
    fun getComplaintDetail(no: String):Observable<BaseBean<ComplaintDetailBean>>

    fun getApplyDetails(applyId: String): Observable<BaseBean<ApplyDetailBean>>

    fun applyAudit(
        applyId: String,
        approveRemark: String,
        approveStatus: String
    ): Observable<BaseBean<String>>

    fun getApplyList(
        pageNum: Int,
        pageSize: Int,
        filter: String
    ): Observable<BaseBean<ApplyBean>>

    fun getApplyResult(
        applyId: String,
        mobile: String
    ): Observable<BaseBean<ApplyResultBean>>

    fun getTakeCareFullOrder(orderId: String): Observable<BaseBean<WorkOrderDetailBean>>


    fun listBuilding(
    ): Observable<BaseBean<List<BuildingtBean>>>

    fun listFloor(
        buildingId:String
    ): Observable<BaseBean<List<FloorBean>>>

    fun listPointType(
        systemId:String
    ): Observable<BaseBean<List<DeviceTypeBean>>>

    fun takeCareOrderRecord(
        pageNum: Int,
        pageSize: Int,
        filter: TakeCareRecordFilterParams
    ): Observable<BaseBean<TakeCareRecordBean>>

    fun addApply(
        params: GuestApplyParam
    ): Observable<BaseBean<String>>

    fun uploadImg(imgSrc: String): Observable<BaseBean<ImgRspBean>>
    fun getCommunities(communityRequestBean: CommunityRequestBean):Observable<BaseBean<CommunityResponseBean>>
    fun getNotices(communityRequestBean: CommunityRequestBean):Observable<BaseBean<NoticeResponseBean>>
    fun getActivityProfileList(params: Map<String, String>):Observable<BaseBean<ActivityProfileListBean>>
    fun getActivityDetail(activityId: String):Observable<BaseBean<ActivityDetailBean>>
    fun joinActivity(activityId: String):Observable<BaseBean<Any?>>



    fun takeCareOrderScanRecord(
        pageNum: Int,
        pageSize: Int,
        filter: String
    ): Observable<BaseBean<TakeCareRecordBean>>
    fun getBulletinDetail(id:Int):Observable<BaseBean<BulletinDetailBean>>
}